package JavaTest.polymorphic.dynamic;

/**
 * 动态绑定机制
 * 1. 当调用对象方法的时候，该方法会和该对象的内存地址（运行类型）绑定
 * 2. 当调用对象属性时，则没有动态绑定机制，哪里声明，使用那里
 */
public class C {
    public static void main(String[] args) {
        A a = new B();
        /**
         * 调用过程：
         * 1. a调用sum()方法，
         * 2. 由于a的运行类型是B，所以到B类中寻找sum()方法
         * 3. B类中找不到sum()方法，所以查找父类A。
         * 4. 找到A类中的sum()，运行sum()方法中的getI().
         * 5. 由于getI()是方法，所以和a的运行类型B绑定。
         * 6. 到B类中寻找getI()方法。找到，调用
         * 7. 找到B类中的getI()方法。调用B类的属性，返回20（若在A类中找到getI()方法，则返回10）
         */
        System.out.println(a.sum());
        System.out.println(a.sum1());
    }
}
